package ext.tianma.util;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;

import wt.fc.Persistable;
import wt.fc.ReferenceFactory;
import wt.util.WTException;
import wt.util.WTRuntimeException;

/**
 * 类名: TMUtil </br>
 * 包名: ext.tianma.util
 * 描述: 一些常用的API
 * @author xucr
 * 创建时间: 2020年6月28日
 * 发布版本: V1.0
 */
public class TMUtil {

	/**
	 * null类型转换
	 * @param str
	 * @return
	 * @author xucr
	 * @CreateDate 2020年6月28日
	 */
	public static String conversion(String str){
		return null == str || "null".equals(str.trim()) ? "" : str.trim();
	}
	
	/**
	 * 清除字符串最后一个字符
	 * @param str
	 * @param clearStr
	 * @return
	 * @author xucr
	 * @CreateDate 2020年6月28日
	 */
	public static String clearEndStr(String str, String clearStr){
		if(null == str || null == clearStr){
			str = "";
		}
		if(str.endsWith(clearStr)){
			str = str.substring(0,str.length() - clearStr.length());
		}
		return str;
	}
	
	/**
	 * 判断是否是数字
	 * @param value
	 * @return
	 * @author xucr
	 * @CreateDate 2020年6月28日
	 */
	public static boolean isNumeric(String value){
		if(StringUtils.isNotEmpty(value))
		{
			return value.matches("^[0-9]+\\.{0,1}[0-9]{0,6}$");
		}else{
			throw new WTRuntimeException(value.toString());
		}
	}
	
	/**
	 * 保留几位小数
	 * 特点：120返回120.0
	 * @param d 数据
	 * @param num 保留位数
	 * @author xucr
	 * @CreateDate 2020年6月28日
	 */
	public static Double getValid(Double d, Integer num){
		BigDecimal df = new BigDecimal(d);
		d = df.setScale(num,BigDecimal.ROUND_HALF_UP).doubleValue();
		return d;
	}
	
	/**
	 * 保留2位小数，可能传入的值非数字
	 * 特点：120返回120.00
	 * @param str 数据
	 * @param str
	 * @return
	 * @author xucr
	 * @CreateDate 2020年6月28日
	 */
	public static String resultRef (String str) {
		String result = "";
		if(StringUtils.isNotEmpty(str)){
			if(isNumeric(str)){
				Double d = Double.valueOf(str);
				DecimalFormat df = new DecimalFormat("#0.00");
				result = df.format(d);
			} else {
				result = str;
			}
		}
		return result;
	}
	
	/**
	 * 替换字符
	 * @param strValue
	 * @param replaceValue
	 * @param strValue
	 * @param replaceValue
	 * @return
	 * @author xucr
	 * @CreateDate 2020年6月28日
	 */
	public static String replace(String strValue, String replaceValue){
		if(null != strValue && !"".equals(strValue.trim()) && null != replaceValue){
			if(strValue.indexOf("\r\n") > -1){
				strValue = strValue.replaceAll("\r\n", replaceValue);
			}
			if(strValue.indexOf("\r") > -1){
				strValue = strValue.replaceAll("\r", replaceValue);
			}
			if(strValue.indexOf("\n") > -1){
				strValue = strValue.replaceAll("\n", replaceValue);
			}
			if(strValue.indexOf(" ") > -1){
				strValue = strValue.replaceAll(" ", replaceValue);
			}
			if(strValue.indexOf("  ") > -1){
				strValue = strValue.replaceAll("  ", replaceValue);
			}
		}
		return strValue;
	}
	
	/**
	 * 将字符串时间转成Timestamp
	 * @param date
	 * @return
	 * @author xucr
	 * @CreateDate 2020年7月6日
	 */
	public static Timestamp getTimestamp(String date){
		Timestamp timestamp = null;
		if(null != date && !"".equals(date.trim())){
			timestamp =  Timestamp.valueOf(date);
		}
		return timestamp;
	}
	
	/**
	 * 将字符串转换成Date
	 * @param timeValue
	 * @return
	 * @author xucr
	 * @CreateDate 2020年9月3日
	 */
	public static Date getDate(String timeValue, String format){
		SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.CHINA);
		Date date = null;
		try {
			date = formatter.parse(timeValue);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	
	/**
	 * 将Date转成String
	 * @param date
	 * @param format
	 * @return
	 * @author xucr
	 * @CreateDate 2020年7月6日
	 */
	public static String getStringTime(Date date, String format){
		String str = "";
		if(null != date){
			SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.CHINA);
			str = formatter.format(date);
		} 
		return str;
	}
	
	/**
	 * 将Timestamp转换成String
	 * @param time
	 * @param format
	 * @return
	 * @author xucr
	 * @CreateDate 2020年7月6日
	 */
	public static String timestampToString(Timestamp time, String format){
		String str = "";
		if(null != time){
			SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.CHINA);
			str = formatter.format(time);
		}
		return str;
	}
	
	/**
	 * 以当前时间作为随机数
	 * @return
	 * @author xucr
	 * @CreateDate 2020年8月21日
	 */
	public static String getnowaday(){
		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss", Locale.CHINA);
		Calendar cal = Calendar.getInstance(Locale.CHINA);
		formatter.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
		String nowaday = formatter.format(cal.getTime());
		return nowaday;
	}
	
	/**
	 * 按照指定格式得到当前时间
	 * @param format
	 * @return
	 * @author xucr
	 * @CreateDate 2020年8月27日
	 */
	public static String getnowaday(String format){
		SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.CHINA);
		Calendar cal = Calendar.getInstance(Locale.CHINA);
		formatter.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
		String nowaday = formatter.format(cal.getTime());
		return nowaday;
	}
	
	/**
	 * 得到当前时间,Date类型
	 * @return
	 * @author chaoren.xu
	 * @CreateDate 2015年10月13日
	 */
	public static Date getCurrentDate(String format){
		SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.CHINA);
		Calendar cal = Calendar.getInstance(Locale.CHINA);
		formatter.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
		Date date = cal.getTime();
		return date;
	}
	
	/**
	 * 得到当前时间，String类型
	 * @return
	 * @author chaoren.xu
	 * @CreateDate 2015年10月13日
	 */
	public static String getCurrentDateToStr(String format){
		SimpleDateFormat formatter = new SimpleDateFormat(format, Locale.CHINA);
		Calendar cal = Calendar.getInstance(Locale.CHINA);
		formatter.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
		String date = formatter.format(cal.getTime());
		return date;
	}
	
	/**
	 * 根据对象得到oid
	 * @param per
	 * @return
	 * @author xucr
	 * @CreateDate 2020年8月26日
	 */
	public static String obj2Oid(Persistable per) {
		ReferenceFactory rf = new ReferenceFactory();
		String perOid = "";
		try {
			perOid = rf.getReferenceString(per);
		} catch (WTException e) {
			e.printStackTrace();
		}
		return perOid;
	}
	
	/**
	 * 根据oid得到对象
	 * @param perOid
	 * @return
	 * @author xucr
	 * @CreateDate 2020年8月26日
	 */
	public static Persistable oid2Obj(String perOid) {
		ReferenceFactory rf = new ReferenceFactory();
		Persistable p = null;
		try {
			p = rf.getReference(perOid).getObject();
		} catch (WTException e) {
			e.printStackTrace();
		}
		return p;
	}
	
	/**
	 * 跨域访问请求头
	 * @param response
	 * @author xucr
	 * @CreateDate 2020年8月25日
	 */
	public static void setHeader(HttpServletResponse response) {
		response.setHeader("Access-Control-Allow-Origin", "*");
	}
	
	/**
	   * 封装日期函数
	   * @param date  日期
	   * @param day   天数
	   * @param month 月份数
	   * @return
	   */
	  public static Date addDate(Date date, int day, int month, int year) {
	    //设置日期格式
	    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	    //实例化日历
	    Calendar c = Calendar.getInstance();
	    //更改天数
	    c.add(Calendar.DATE, day);
	    //更改月份
	    c.add(Calendar.MONTH, month);
	    //更改年份
	    c.add(Calendar.YEAR, year);
	    
//	    Date time = c.getTime();
//	    String preDay = sdf.format(time);
//	    return preDay;
	    
	    return c.getTime();
	  }
	
}
